﻿using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text.RegularExpressions;

namespace Administrator
{
    public static class Checker
    {
        public static bool IsLatinString(String str)
        {
            string pattern = @"^[a-zA-Z0-9]{" + str.Length.ToString(CultureInfo.InvariantCulture) + "}$";

            Regex pat = new Regex(pattern);
            Match match = pat.Match(str);
           
            return match.Success;
        }

        // проверка идентификатора (имени) на алфавит
        public static bool IsValidIdentifier(string Str)
        {
            string sPattern = @"[^а-яА-Я-,;:\s\w\(\)\+\.]";
            Regex rPattern = new Regex(sPattern);
            MatchCollection Match_ = rPattern.Matches(Str);
            return (Match_.Count == 0);
        }

        /// <summary>
        /// Проверка длины строки юникода (для записи в Oracle)
        /// </summary>
        /// <param name="str">проверяемая строка</param>
        /// <returns>длина в байтах</returns>
        public static int GetLengthUnicode(string str)
        {
            int Result = 0;
            int Ch = 0;
            for (int i = 0; i < str.Length; i++)
            {
                Ch = str[i];
                // "добавочные" байты 
                Result += (Ch <= 256) ? 0 : 1;
            }
            return Result;
        }

        public static int GetCyrillicSymbolsCount(string str)
        {
            const string pattern = @"[а-яА-ЯёЁ]{1}";

            Regex pat = new Regex(pattern);

            MatchCollection matchCol = pat.Matches(str);

            return matchCol.Count;
        }

        private static int m_GetSymbolsCount(string str, string pattern)
        {
            Regex pat = new Regex(pattern);
            MatchCollection matchCol = pat.Matches(str);
            return matchCol.Count;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static int GetQuotesSymbolsCount(string str)
        {
            return m_GetSymbolsCount(str, @"[\x22]{1}");
        }

        public static int GetApostropheSymbolsCount(string str)
        {
            return m_GetSymbolsCount(str, @"[\x27]{1}");
        }
        //

    }
}
